﻿#region librerías que uso
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using AForge.Video;
using AForge.Video.DirectShow;
#endregion

namespace eCampus
{
    /// <summary>
    /// Formulario para la toma de foto
    /// </summary>
    public partial class FormTomaFoto : Form
    {
        #region variables
        /// <summary>
        /// variables
        /// </summary>
        private FilterInfoCollection VideoCaptureDevices;
        private VideoCaptureDevice FinalVideo;
        public bool fotoTomada = false;
        public Image fotoTomadaWebCam;
        public bool quiereLaFoto = false;
        #endregion

        #region constructores
        /// <summary>
        /// Constructor por defecto
        /// </summary>
        public FormTomaFoto()
        {
            InitializeComponent();
        }
        #endregion

        #region btTomarFoto_Click

        /// <summary>
        /// Evento al botón asociado para tomar foto
        /// </summary>
        /// <param name="sender">btTomarFoto</param>
        /// <param name="e">Click</param>
        private void btTomarFoto_Click(object sender, EventArgs e)
        {
            if (FinalVideo != null)
            {
                if (FinalVideo.IsRunning)
                {
                    FinalVideo.Stop();
                    fotoTomadaWebCam = pictureBoxFotoTomada.Image;
                    fotoTomada = true;
                }
            }
        }
        #endregion

        #region FinalVideo_NewFrame
        /// <summary>
        /// Captura Frames
        /// </summary>
        /// <param name="sender"> FinalVideo</param>
        /// <param name="eventArgs">NewFrame</param>
        void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap video = (Bitmap)eventArgs.Frame.Clone();
            pictureBoxFotoTomada.Image = video;
        }
        #endregion

        #region Load
        /// <summary>
        /// Load que se ejecuta la cargar el formulario
        /// </summary>
        /// <param name="sender">FormTomaFoto</param>
        /// <param name="e">Load</param>
        private void FormTomaFoto_Load(object sender, EventArgs e)
        {
            try
            {
                VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                foreach (FilterInfo VideoCaptureDevice in VideoCaptureDevices)
                {
                    cbDispositivosVideo.Items.Add(VideoCaptureDevice.Name);
                }
                cbDispositivosVideo.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region btCancelar_Click
        /// <summary>
        /// Evento asociado al botón para cancelar la toma de fotos
        /// </summary>
        /// <param name="sender">btCancelar</param>
        /// <param name="e">Click</param>
        private void btCancelar_Click(object sender, EventArgs e)
        {
            if (fotoTomada == true)
            {
                if (MessageBox.Show("¿ Desea utilizar la foto tomada en su perfil?", "Uso de la foto", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                {
                    if (FinalVideo != null)
                    {
                        if (FinalVideo.IsRunning)
                        {
                            FinalVideo.Stop();
                        }
                    }
                    quiereLaFoto = true;
                    Close();
                    Dispose();
                }
                else
                    {
                        if (FinalVideo != null)
                        {
                            if (FinalVideo.IsRunning)
                            {
                                FinalVideo.Stop();
                            }
                        }
                        Close();
                        Dispose();
                    }
            }
            else
              {
                  if (FinalVideo != null)
                  {
                      if (FinalVideo.IsRunning)
                      {
                          FinalVideo.Stop();
                      }
                  }
                 Close();
                 Dispose();
              }
        }
        #endregion

        #region cbDispositivosVideo_MouseHover
        /// <summary>
        /// Evento asociado al combobox para visulizar dispositivos de entrada de video
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cbDispositivosVideo_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(cbDispositivosVideo, "Tus Dispositivos de entreda de Vídeo");
        }
        #endregion

        #region usabilidad
        /// <summary>
        /// Evento asociado para iniciar la captura de foto de webcam
        /// </summary>
        /// <param name="sender">button1</param>
        /// <param name="e">Click</param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[cbDispositivosVideo.SelectedIndex].MonikerString);
                FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
                FinalVideo.Start();
            }
            catch(Exception)
            {
               MessageBox.Show("No se ha podido capturar imagen con su cámara","Error",MessageBoxButtons.OK, MessageBoxIcon.Error);            
            }
        }

        private void pictureBoxFotoTomada_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(pictureBoxFotoTomada, "Tu foto");
        }

        private void button1_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(button1, "Inicia la Webcam");
        }

        private void btTomarFoto_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(btTomarFoto, "Sonríe, y toma tu foto");
        }

        private void btCancelar_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(btCancelar, "Decide si deseas conservar tu foto y sal");
        }

        #endregion



    }
}
